{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Weighted Fit to a Polynomial\n", "\n", "*June 9, 2021*\n", "\n", "In this script we will fit a polynomial to a set of experimental data. The fit will be weighted by the measurement uncertainties. This tutorial is very similar to the weighted linear fit tutorial, so let's get to it!\n", "\n", "Updated by Jordan Andrews on June 9, 2021 with the use of np.polynomial.Polynomial([a, b, c]).\n", "\n", "Enter the data. Suppose that $y$ is the number of counts in some kind of counting experiment. In that case, the error in $y$ is just the square root of the number of counts ($\\sqrt{y}$)." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "X = np.array([1, 2, 3, 4, 5, 6])\n", "Y = np.array([6, 16, 27, 62, 95, 130])\n", "errY = np.sqrt(Y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the data using *plt.errorbar(x,y,e)*." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "plt.errorbar(X, Y, errY, fmt = 'ko', markersize = 5,\\\n", " linewidth = 1.8,\\\n", " markeredgecolor = 'b',\\\n", " capsize = 5,\\\n", " markerfacecolor = (.49, 1, .63))\n", "plt.xlabel('X')\n", "plt.ylabel('Y');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To do the actual fit, we will use the 'curve_fit()' function from, the *SciPy* module. This way of fitting is very nice because we use it for all types of fit models (linear, polynomial, line-in-parameter fits, and nonlinear fit). It is capable of doing both unweighted and weighted fits and it will return uncertainties in the fit parameters.\n", "\n", "The first step is to define a function for the model that we will fit our data to. In this case, the model is a quadratic." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def quadFunc(x, a0, a1, a2):\n", " y = a2*x**2 + a1*x + a0\n", " return y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is the actual command to execute the fit. At a minimum, *curve_fit()* requires as inputs the function that defines the model, the $x$-data, and the $y$-data. The statement below tells *curve_fit()* to return a list of the the best-fit parameters and the covariance matrix which will be used to determine the error in the fit parameters." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "from scipy.optimize import curve_fit\n", "a_fit, cov = curve_fit(quadFunc, X, Y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Print the best-fit parameters." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The best-fit parameters are:\n", " a2 = 3.803571428577548 \n", " a1 = -1.1392857142904127 \n", " a0 = 2.300000000002897\n" ] } ], "source": [ "print('The best-fit parameters are:\\n a2 =', a_fit[2], '\\n',\\\n", " 'a1 =', a_fit[1], '\\n',\n", " 'a0 =', a_fit[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The uncertainties of the best-fit parameters are determined from the square roots of the diagonal elements of the covariance matrix. We can select the diagonal elements using (Note the use of the unicode character \\u0394 to print $\\Delta$):" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The errors in the parameters are:\n", " Δa2 = 0.7749673564844516 \n", " Δa1 = 5.541603562820239 \n", " Δa0 = 8.470455002780565\n" ] } ], "source": [ "print('The errors in the parameters are:\\n \\u0394a2 =', np.sqrt(np.diag(cov))[2],\\\n", " '\\n', '\\u0394a1 =', np.sqrt(np.diag(cov))[1],\\\n", " '\\n', '\\u0394a0 =', np.sqrt(np.diag(cov))[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*NumPy* has a nice package for polynomials, called *polynomial*. There are six different polynomial types in this package. For our case, we are dealing with a simple power series. You can use the *Polynomial* constructor for this. y = np.polynomial.Polynomial([a, b, c]) results in $y = a + b\\,x + c\\,x^2$. \n", "\n", "Here's the best-fit fucntion obtained using *a_fit* from *curve_fit()* and the built in polynomial package of *NumPy*." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$x \\mapsto \\text{2.300000000002897} - \\text{1.1392857142904127}\\,x + \\text{3.803571428577548}\\,x^{2}$" ], "text/plain": [ "Polynomial([ 2.3 , -1.13928571, 3.80357143], domain=[-1, 1], window=[-1, 1])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fitFcn = np.polynomial.Polynomial(a_fit)\n", "fitFcn" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This gives us an easy way to plot the fit on top of the data." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#First reproduce the plot of the data that was generated above.\n", "plt.errorbar(X, Y, errY, fmt = 'ko', markersize = 5,\\\n", " linewidth = 1.8,\\\n", " markeredgecolor = 'b',\\\n", " capsize = 5,\\\n", " markerfacecolor = (.49, 1, .63))\n", "plt.xlabel('X')\n", "plt.ylabel('Y')\n", "plt.title('Unweighted Quadratic Fit');\n", "\n", "# Next, add to that plot the best-fit curve.\n", "xx = np.arange(-1, 10, 0.1)\n", "plt.plot(xx, fitFcn(xx), 'k-')\n", "plt.axis((0, 7, 0, 150));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All of this has produced an \"unweighted\" fit to the data. To include weights, all we need to do is include another option in *curve_fit()*. Everything else is exactly the same! The new option is *sigma* and it is simply a list of the errors in the $y$-values. Note that many fitting routines require you to provide the actual weights as $1/\\sigma^2$. That is not the case here. You just have to provide the absolute $y$-uncertainties.\n", "\n", "Here's a block of code that does the fit, extracts the best fit function, the best-fit parameters, the uncertainties, and then plots the result." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The best-fit parameters are: \n", " a2 ± Δa2 = 4.287328095604868 ± 4.588378516498007 \n", " a1 ± Δa1 = -4.430769654410538 ± 4.135258989919286 \n", " a0 ± Δa0 = 6.2244252850495565 ± 0.6989651955680422\n" ] }, { "data": { "image/png": "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8MMPc/XVV3PJJZcU6zkZGRmY2a5bVlYWWVlZu7WZGRkZGdENH4KoTvdtZk2A8e7eMlg+F3gaOMvdswut1wJ4k8i4w2HANOBId9/n1V413beIFNfatWtp1aoVqampzJ8/v1x3LRV3uu+oTbVhZiOBs4G6ZrYGGEjkqKWDgCnBPCfz3L2vuy81s1HAMiJdTzfsrziIiBRXfn4+F198scYdSihqBcLd04tofnkf6z8EPBStPCJSfg0cOJDZs2fz+uuva9yhBHQmtYiUaRMmTCjxuINEqECISJn17bffctlll9GqVSv+/ve/hx0n4ahAiEiZtH37dnr37k1BQQHvvPOOxh0OgK4HISJlUv/+/VmwYAFjx46ladOmYcdJSNqDEJEy5+233+a5557j9ttvp0ePHmHHSVgqECJSpixfvpyrr76a0047jUceeSTsOAlNBUJEyoycnBx69uxJ1apVeeutt3R9h99IYxAiUia4O1dddRUrVqxgypQpNGzYcP9Pkn1SgRCRMmHQoEGMGjWKxx57jLZt24Ydp0xQF5OIJLyPPvqIO+64gx49enDHHXeEHafMUIEQkYSWlZVF7969adq0KcOGDSOY501KgbqYRCRh5eXl0bt3b3766SemTp1KzZo1w45UpqhAiEjCuu222/j4448ZOXIkLVq0CDtOmaMuJhFJSMOGDdt1MtxFF10UdpwySQVCRBJOZmYmffv2pW3btjz66KNhxymzVCBEJKFs2LCBnj17Ur9+fd566y0qVVJPebSoQIhIVO15Tee93YpzTeedg9LZ2dmMGzeOlJSU6L+Bciyq16SONl2TWiTxHHbYYQCsW7euxM+99dZbGTRoECNGjOCyyy4r7WjlRnGvSa09CBFJCCNGjGDQoEHcdNNNKg4xogIhInFvwYIFXHvttZxzzjk89dRTYccpN6JWIMzsFTPbYGZLCrXVMbMpZvZVcF+70GN3m9lKM1thZp2ilUtEEsu6devo3r07qampjBo1SjO0xlA09yCGAefu0XYXMM3djwSmBcuYWXPgIqBF8Jx/mFnFKGYTkQSwbds2evbsyY8//sh7771H3bp1w45UrkStQLj7bGDjHs3dgOHB38OB7oXa33L37e7+NbASOCla2UQk/rk7/fr1Y/78+YwYMYJjjz027EjlTqzHIOq7exZAcF8vaG8ArC603pqg7VfM7Foz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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "a_fit, cov = curve_fit(quadFunc, X, Y, sigma = errY)\n", "\n", "# Extract the fit parameters and their uncertainties.\n", "print('The best-fit parameters are:\\\n", " \\n a2 \\u00B1 \\u0394a2 =', a_fit[2], '\\u00B1', np.sqrt(np.diag(cov))[0],\\\n", " '\\n a1 \\u00B1 \\u0394a1 =', a_fit[1], '\\u00B1', np.sqrt(np.diag(cov))[1],\\\n", " '\\n a0 \\u00B1 \\u0394a0 =', a_fit[0], '\\u00B1', np.sqrt(np.diag(cov))[2])\n", "\n", "# Plot the data.\n", "plt.figure()\n", "plt.errorbar(X, Y, errY, fmt = 'ko', markersize = 5,\\\n", " linewidth = 1.8,\\\n", " markeredgecolor = 'b',\\\n", " markerfacecolor = 'r',\\\n", " capsize = 5)\n", "plt.xlabel('X')\n", "plt.ylabel('Y')\n", "plt.title('Weighted Quadratic Fit')\n", "\n", "# Get the best-fit line.\n", "fitFcn = np.polynomial.Polynomial(a_fit)\n", "\n", "# Plot the best-fit line.\n", "xx = np.arange(-1, 10, 0.1)\n", "plt.plot(xx, fitFcn(xx), 'k-')\n", "plt.axis((0, 7, 0, 150));" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.6" } }, "nbformat": 4, "nbformat_minor": 5 }